function options(params) {
    return {
        padding: 0,
        animation: {
            duration:500,
            easing: "linear"
        },
        autoResize: true,
        zoom: 1,
        zoomRange: [1, 1.1],
        node: {
            type: 'circle',
            style: {
                labelTextAlign: 'center',
                labelBackground: true,
                labelBackgroundRadius: 5,
                labelMaxWidth: '500%',
                labelMaxLines: 2,
                labelFill: 'transparent',
                labelPlacement: 'bottom',
                labelBackgroundFill: 'rgba(255,255,255,0)',
                labelPadding: [4, 2, 0, 2],
                haloLineWidth: 10,
                labelWordWrap: true,
                ports: [],
                lineWidth: 0,
                fillOpacity: 1,
                fill: 'rgba(255,255,255,0)',
                size: (d) => d.style.size,
                labelFontSize: (d) => d.style.labelFontSize || 60,
                halo: (d) => d.data?.halo || false,
                src: (d) => d.style.iconSrc,
                iconVisibility: (d) => d.style.iconVisibility,
                iconWidth: (d) => d.style.iconWidth || 160,
                iconHeight: (d) => d.style.iconHeight || 180
            },
            state: {
                selected: {
                    halo: true,
                    lineWidth: 0,
                    fillOpacity: 1,
                    labelOpacity: 1
                },
                active: {
                    halo: false,
                    lineWidth: 0,
                    fillOpacity: 1,
                    labelOpacity: 1
                },
                neighborActive: {
                    halo: false,
                },
                unselected: {
                    halo: false,
                    lineWidth: 0,
                    fillOpacity: 0.08,
                    labelOpacity: 0.08,
                    strokeOpacity: 0.08,
                },
                inactive: {
                    halo: false,
                    opacity: 0.08,
                    lineWidth: 0,
                }
            },
            animation: {
                enter: "fade", // 使用渐变动画
                show: "fade", // 使用渐变动画
                update: "translate", // 使用平移动画
                exit: "fade" // 使用渐变动画
            }
        },
        edge: {
            // type: 'quadratic',
            // type: 'path-in-line',
            type: 'ant-line',
            style: {
                lineDash: [10, 10],
                curveOffset: 30,
                curvePosition: 0.5,
                lineWidth: 2,
                endArrow: false,
                labelFill: "transparent",
                labelFontSize: 12,
                labelBackground: false,
                labelBackgroundFill: '#1783ff',
                labelBackgroundStroke: '#1783ff',
                labelBackgroundLineWidth: 1,
                labelBackgroundRadius: 4,
                labelBackgroundOpacity: 0.8,
                labelPadding: [2, 4],
                // stroke: "#ffffff",
                stroke: (d) => d.style.stroke || "transparent",
            },
            state: {
                selected: {
                    halo: true,
                    fillOpacity: 1,
                    opacity: 1,
                },
                active: {
                    halo: false,
                    fillOpacity: 1,
                    labelOpacity: 1
                },
                unselected: {
                    halo: false,
                    lineWidth: 1,
                    fillOpacity: 0.08,
                    labelOpacity: 0.08,
                    strokeOpacity: 0.08,
                },
                inactive: {
                    halo: false,
                    lineWidth: 1,
                    fillOpacity: 0.08,
                    labelOpacity: 0.08,
                    strokeOpacity: 0.08,
                }
            },
        },
        behaviors: [
            'optimize-viewport-transform',
        ],
        plugins: [{
            type: 'tooltip',
            getContent: (e, items) => {
                let result = ``;
                items.forEach((item) => {
                    result += `<p style="pointer-events: none;margin: 0">${item.style.labelText}</p>`;
                });
                return result;
            },
        }]
    }
}

export default options
